namespace ManagedFreeFrame.Struct
{
    using System;
    using System.Runtime.InteropServices;

    /// <summary>
    /// Structure containing the frame properties
    /// size = 16 bytes
    /// 
    /// The ProcessFrameCopy function performs a source->dest buffer frame process in effects plugins. 
    /// It is capable of processing multiple input frames - getPluginCaps should be used to see how many input frames the plugin would like. 
    /// 
    /// PLUGIN: 
    /// Effect Plugins must support the processFrame (in-place) method of processing.
    /// This method is optional. 
    /// Plugins should specify if they are capable of this kind of processing - and if they have optimized a particular method - in the Plugin Caps system. 
    /// Source Plugins should not use this function as they do not require input frames. 
    /// Source plugins should just use processFrame  
    /// </summary>
    // ReSharper disable FieldCanBeMadeReadOnly.Global
    // ReSharper disable MemberCanBePrivate.Global
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    public struct ProcessFrameCopyStruct
    {
        /// <summary>
        /// Number of input frames contained in ppInputFrames
        /// </summary>
        [MarshalAs(UnmanagedType.U4)]
        public UInt32 NumInputFrames;


        /// <summary>
        /// A pointer to an array of pointers to input frames.
        /// </summary>
        [MarshalAs(UnmanagedType.U4)]
        public IntPtr PpInputFrames;

        /// <summary>
        /// Pointer to output frame. 
        /// </summary>
        [MarshalAs(UnmanagedType.U4)]
        public IntPtr POutPutFrame;
    }
    // ReSharper restore MemberCanBePrivate.Global
    // ReSharper restore FieldCanBeMadeReadOnly.Global
}